SAFE Logo
CodeMatch Detailed Report
Version: 5.7.2 | Date: 08/27/16 | Time: 18:43:56

SCORE

SETTINGS
Compare file 1: Z:\Zeidman Consulting\projects\DOS and CPM\code\CHM\CPM\1.3\BIOS.asm
To file 2: Z:\Zeidman Consulting\projects\DOS and CPM\code\CHM\CPM\1.3\BIOS.asm
Links to results: Matching Statements
Matching Comments and Strings
Matching Instruction Sequences
Matching Identifiers
Partially Matching Identifiers
Score
RESULTS
Matching Statements
File1 Line# File2 Line# Statement
33BIAS EQU 800H
1010VERS EQU 13
1111PATCH EQU 1500H+BIAS
1313ORG PATCH
1414CPMB EQU 800H+BIAS
1515BDOS EQU 906H+BIAS
1616CPML EQU $-CPMB
1717NSECTS EQU CPML/128
1818LBIAS EQU 980H-CPMB
1919OFFSET EQU 2
2020DISKA EQU 84H
2121BUFF EQU 80H
2222RETRY EQU 10
5050JMP BOOT
5151WBOOTE:
52
217
52
217
JMP WBOOT
5353JMP CONST
5454JMP CONIN
5555JMP CONOUT
5656JMP LIST
5757JMP PUNCH
5858JMP READER
5959JMP HOME
6060JMP SELDSK
61
270
61
270
JMP SETTRK
6262JMP SETSEC
6363JMP SETDMA
6464JMP READ
6565JMP WRITE
7676NDISKS EQU 2
7777REVRT EQU OFDH
7878INTC EQU 0FCH
7979ICON EQU 0F3H
8080INTE EQU 0111$1110B
8383MON80 EQU BF300H
8484RMONB0 EQU BFF0FH
8585CI EQU BF803H
8686RI EQU BF806H
8787CO EQU BF809H
8888PO EQU BF86CH
8989LO EQU BF80FH
9090CSTS EQU BF812H
9393BASE EQU 73H
9494DSTAT EQU BASE
9595RTYPE EQU BASE+1
9696RBYTE EQU BASE+3
9898LOW EQU BASE+1
9999HIGH EQU BASE+2
101101READF EQU 4H
102102WRITF EQU 6H
103103RECAL EQU 3H
104104IORDY EQU 4H
105105CR EQU BDH
106106LF EQU BAH
108108SIGNON:
109109DB CR, LF, LF
111111DB VERS/10+ , , VERS MOD 10+
112112DB CR, LF, 0
114114BOOT:
115115LXI SP, BUFF+80H
116116LXI H, SIGNON
117
338
117
338
CALL PRMSG
118
162
175
179
118
162
175
179
XRA A
119119STA DISKA
120120JMP GOCPM
123123WBOOT:
127127LXI SP, BUFF
129
357
129
357
MVI C, RETRY
130
145
210
130
145
210
PUSH B
131131WBOOT0:
132132LXI B, CPMB
133
153
184
133
153
184
CALL SETDMA
134134MVI C, 2
135
165
135
165
CALL SETSEC
136
138
269
136
138
269
MVI C, 0
137
161
137
161
CALL SETTRK
139139CALL SELDSK
142
166
206
142
166
206
POP B
143143MVI B, NSECTS
144144RDSEC:
146146CALL READ
147147JNZ BOOTERR
148148LHLD IOD
149149LXI D, 128
150150DAD D
151151MOV B, H
152152MOV C, L
154154LDA IOS
155155CPI 26
156156JC RD1
158158LDA IOT
159159INR A
160
164
285
331
160
164
285
331
MOV C, A
163163RD1: INR A
167
251
167
251
DCR B
168168JNZ RDSEC
170170GOCPM:
173173MVI A, 12H
174174OUT REVRT
176
178
176
178
OUT INTC
177177MVI A, INTE
180180OUT ICON
183183LXI B, BUFF
187187MVI A, JMP
188188STA 0
189189LXI H, WBOOTE
190190SHLD 1
191191STA 5
192192LXI H, BDOS
193193SHLD 6
194194STA 7*8
195195LXI H, MON80
196196SHLD 7*8+1
199199LXI H, DISKA
200200MOV C, M
202202JMP CPMB
205205BOOTERR:
207
247
418
207
247
418
DCR C
208208JZ BOOTER0
211211JMP WBOOT0
213213BOOTER0:
215215LXI H, BOOTMSG
216216CALL ERROR
219219BOOTMSG:
220220DB , 0
223223CONST:
225225JMP CSTS
227227CONIN:
228228CALL CI
229229ANI 7FH
232232CONOUT:
234
276
234
276
MOV A, C
235235CPI LF
237237CALL CO
243243MVI B, 50
244244T1:
245245MVI C, 182
246246T2:
248248JNZ T2
252252JNZ T1
255255LIST:
257257JMP LO
259259PUNCH:
261261JMP PO
263263READER:
265265JMP RI
267267HOME:
272272SELDSK:
277277CPI NDISKS
278278CNC RMON80
284284ANI 10000B
286286LXI H, IOF
287
326
350
287
326
350
MOV A, M
288288ANI 11001111B
289
352
289
352
ORA C
290
353
290
353
MOV M, A
294294SETTRK:
295295LXI H, IOT
296296MOV H, C
299299SETSEC:
300300LXI H, IOS
301301MOV M, C
304304SETDMA:
305305MOV L, C
306306MOV H, B
307307SHLD IOD
310310READ:
311311MVI C, READF
312
319
312
319
CALL SETFUNC
313
320
313
320
CALL WAITIO
317317WRITE:
318318MVI C, WRITF
325325PRMSG:
327
381
327
381
ORA A
330330PUSH H
332
342
344
332
342
344
CALL CONOUT
333333POP H
334334INX H
335335JMP PRMSG
337337ERROR:
340340CALL CONIN
341341MVI C, CR
343343MVI C, LF
347347SETFUNC:
349349LXI N, IOF
351351ANI 11111000B
356356WAITIO:
358358REWAIT:
360
374
360
374
IN RTYPE
361
385
396
361
385
396
IN RBYTE
363363MVI A, IOPB AND 0FFH
364364OUT LOW
365365MVI A, IOPB SHR 8
366366OUT HIGH
368368WAIT0:
369369IN DSTAT
370370ANI IOPDY
371371JZ WAIT0
377377CPI 10B
378378JZ WREADY
382382JNZ WERROR
387387JC WREADY
389389ANI 11111110B
390390JHZ WERROR
395395WREADY:
397397JMP TRYC0UNT
399399WERROR:
416416TRYCOUNT:
419419JNZ REWAIT
422422MVI A, I
427427IOPB:
428428DB B0H
429429IOF: DB READF
430430ION: DB 1
431431IOT: DB OFFSET
432432IOS: DB 1
433433IOD: DW BUFF

to top

Matching Comments and Strings
File1 Line# File2 Line# Comment/String
11MDS I/O DRIVERS FOR CP/M
22VERSION 1.3 OCTOBER, 1976
33FOR RELOCATION
55COPYRIGHT (C) 1976
66DIGITAL RESEARCH
77BOX 579, PACIFIC GROVE CA.
1010CPM VERSION NUMBER
1414BASE OF CPM CONSOLE PROCESSOR
1515BASIC DOS (RESIDENT PORTION)
1616LENGTH (IN BYTES) OF CPM SYSTEM
1717NUMBER OF SECTORS TO LOAD
1818LOADER BIAS VALUE USED IN SYSGEN
1919NUMBER OF DISK TRACKS USED BY CP/M
2020ADDRESS OF LAST LOGGED DISK ON WARM START
2121DEFAULT BUFFER ADDRESS
2222MAX RETRIES ON DISK I/O BEFORE ERROR
2424PERFORM FOLLOWING FUNCTIONS
2525BOOT COLD START
2626WBOOT WARM START (SAVE I/O BYTE)
2727(BOOT AND WBOOT ARE THE SAME FOR MDS)
2828CONST CONSOLE STATUS
2929REG-A = 00 IF NO CHARACTER READY
3030REG-A = FF IF CHARACTER READY
3131CONIN CONSOLE CHARACTER IN (RESULT IN REG-A)
3232CONOUT CONSOLE CHARACTER OUT (CHAR IN REG-C)
3333LIST LIST OUT (CHAR IN REG-C)
3434PUNCH PUNCH OUT (CHAR IN REG-C)
3535READER PAPER TAPE READER IN (RESULT TO REG-A)
3636HOME MOVE TO TRACK 00
3838(THE FOLLOWING CALLS SET-UP THE IO PARAMETER BLOCK FOR THE
3939MDS, WHICH IS USED TO PERFORM SUBSEQUENT READS AND WRITES)
4040SELDSK SELECT DISK GIVEN BY REG-C (0,1,2...)
4141SETTRK SET TRACK ADDRESS (6,...76) FOR SUBSEQUENT READ/WRITE
4242SETSEC SET SECTOR ADDRESS (1,...,26) FOR SUBSEQUENT READ/WRITE
4343SETDMA SET SUBSEQUENT DMA ADDRESS (INITIALLY 80H)
4545(READ AND WRITE ASSUME PREVIOUS CALLS TO SET UP THE IO PARAMETER
4646READ READ TRACK/SECTOR TO PRESET DMA ADDRESS
4747WRITE WRITE TRACK/SECTOR FROM PRESET DMA ADDRESS
4949JUMP VECTOR FOR INDIVIDUAL ROUTINES
6868END OF CONTROLLER - INDEPENDENT CODE, THE REMAINING SUBROUTINES
6969ARE TAILORED TO THE PARTICULAR OPERATING ENVIRNOMENT, AND ML
7070BE ALTERED FOR ANY SYSTEM WHICH DIFFERS FROM THE INTEL MDS
7272THE FOLLOWING CODE ASSUMES THE MDS MONITOR EXISTS AT 0FB80H
7373AND USES THE I/O SUBROUTINES WITHIN THE MONITOR
7575WE ALSO ASSUME THE MDS SYSTEM HAS TWO DISK DRIVES AVAILABLE
7676NUMBER OF DRIVES AVAILABLE
7777INTERRUPT REVERT PORT
7878INTERRUPT MASK PORT
7979INTERRUPT CONTROL PORT
8080ENABLE RST 0(WARM BOOT), RST 7 (MON
8282MDS MONITOR EQUATES
8383MDS MONITOR
8484RESTART MONB0 (DISK SELECT ERROR)
85
227
85
227
CONSOLE CHARACTER TO REG-A
8686READER IN TO REG-A
8787CONSOLE CHAR FROM C TO CONSOLE OUT
8888PUNCH CHAR FROM C TO PUNCH DEVICE
8989LIST FROM C TO LIST DEVICE
9090CONSOLE STATUS OO/FF TO REGISTER A
9292DISK PORTS AND COMMANDS
9393BASE OF DISK COMMAND IO PORTS
9494DISK STATUS (INPUT)
9595RESULT TYPE (INPUT)
9696RESULT BYTE (INPUT)
9898IOPB LOW ADDRESS (OUTPUT)
9999IOPB HIGH ADDRESS (OUTPUT)
101101READ FUNCTION
102102WRITE FUNCTION
103103RECALIBRATE DRIVE
104104I/O FINISHED MASK
105
341
105
341
CARRIAGE RETURN
106
343
106
343
LINE FEED
108108SIGNON MESSAGE, XXK CP/M VERS Y.Y
11011000K CP/M VERS
114114PRINT SIGNON MESSAGE AND GO TO DOS
117117PRINT MESSAGE
118118CLEAR ACCUMULATOR
119119SET INITIALLY TO DISK A
120120GO TO CP/M
123123LOADER ON TRACK 0, SECTOR 1, WHICH WILL BE SKIPPED FOR WARM
124124READ CP/M FROM DISK - ASSUMING THERE IS A 128 BYTE COLD START
125125START
127127USING DMA - THUS 80 THRU FF AVAILABLE FOR STACK
129129MAX RETRIES
131131ENTER HERE ON ERROR RETRIES
132132SET DMA ADDRESS TO START OF DISK SYSTEM
134134START READING SECTOR 2
136136START READING TRACK 0
138138START WITH DISK 0
139139CHANGES DISKN TO 0
141141READ SECTORS, COUNT NSECTS TO ZERO
142142IO-ERROR COUNT
144144READ NEXT SECTOR
145145SAVE SECTOR COUNT
147147RETRY IF ERRORS OCCUR
148148INCREMENT DMA ADDRESS
149149SECTOR SIZE
150150INCREMENTED DMA ADDRESS IN HL
152152READY FOR CALL TO SET DMA
154154SECTOR NUMBER JUST READ
155155READ LAST SECTOR?
157157MUST BE SECTOR 26, ZERO AND GO TO NEXT TRACK
158158GET TRACK TO REGISTER A
160
164
160
164
READY FOR CALL
162162CLEAR SECTOR NUMBER
163163TO NEXT SECTOR
166166RECALL SECTOR COUNT
167167DONE?
169169DONE WITH THE LOAD, RESET DEFAULT BUFFER ADDRESS
170170(ENTER HERE FROM COLD START BOOT)
171171ENABLE RST0 AND RST 7
173173INITIALIZE COMMAND
176176CLEARED
177177RST0 AND RST7 BITS ON
180180INTERRUPT CONTROL
182182SET DEFAULT BUFFER ADDRESS TO 8OH
186186RESET MONITOR ENTRY POINTS
190190JMP WBOOT AT LOCATION 00
193193JMP BDOS AT LOCATION 5
194194JMP TO MON60 (MAY HAVE BEEN CHANGED BY DDT)
197197LEAVE IOBYTE SET
198198PREVIOUSLY SELECTED DISK WAS B, SEND PARAMETER TO CPM
200200LOOKS LIKE A SINGLE PARAMETER TO CPM
204204ERROR CONDITION OCCURRED, PRINT MESSAGE AND RETRY
206206RECALL COUNTS
209209TRY AGAIN
214214OTHERWISE TOO MANY RETRIES
217
419
217
419
FOR ANOTHER TRY
220220CANNOT BOOT
223223CONSOLE STATUS TO REG-A
224
256
260
264
224
256
260
264
(EXACTLY THE SAME AS MDS CALL)
229229REMOVE PARITY BIT
232232CONSOLE CHARACTER FROM C TO CONSOLE OUT
233233SAME AS MDS CALL, BUT WAIT FOR SLOW CONSOLES ON LINE FEED
234234GET CHARACTER TO ACCUM
235235END OF LINE?
236236SAVE CONDITION FOR LATER
237237SEND THE CHARACTER (MAY BE LINE FEED)
239239RETURN IF IT WASN'T A LINE FEED
241241WAIT 13 CHARACTER TIMES (AT 2400 BAUD) FOR LINE FEED TO HAPPEN
242242(THIS WORKS OUT TO ABOUT 50 MILLISECS)
243243NUMBER OF MILLISECS TO WAIT
245245COUNTER TO CONTROL 1 MILLISEC LOOP
2472471 CYCLE = .5 USEC
24824810 CYCLES= 5.5 USEC
249249-----------
250250= 5.5 USEC PER LOOP* 182 = 1001 USEC
252252FOR ANOTHER LOOP
255255LIST DEVICE OUT
259259PUNCH DEVICE OUT
263263READER CHARACTER IN TO REG-A
267267MOVE TO HOME POSITION
268268TREAT AS TRACK 00 SEEK
272272SELECT DISK GIVEN BY REGISTER C
273273CP/M HAS CHECKED FOR DISK SELECT 0 ON 1, BUT WE MAY HAVE
274274A SINGLE DRIVE MDS SYSTEM, SO CHECK AGAIN AND GIVE ERROR
275275BY CALLING MON80
277277TOO LARGE?
278278GIVES $ADDR MESSAGE AT CONSOLE
284284UNIT NUMBER IN POSITION
285285SAVE IT
286286IO FUNCTION
288288MASK OUT DISK NUMBER
289289MASK IN NEW DISK NUMBER
290290SAVE IT IN IOPB
294294SET TRACK ADDRESS GIVEN BY C
299299SET SECTOR NUMBER GIVEN BY C
304304SET DMA ADDRESS GIVEN BY REGS B,C
310310READ NEXT DISK RECORD (ASSUMING DISK/TRK/SEC/DMA SET)
311311SET TO READ FUNCTION
313313PERFORM READ FUNCTION
314314MAY HAVE ERROR SET IN REG-A
317317DISK WRITE FUNCTION
319319SET TO WRITE FUNCTION
321321MAY HAVE ERROR SET
324324UTILITY SUBROUTINES
325325PRINT MESSAGE AT H,L TO 0
327327ZERO?
329329MORE TO PRINT
337337ERROR MESSAGE ADDRESSES BY H,L
339339ERROR MESSAGE WRITTEN, WAIT FOR RESPONSE FROM CONSOLE
345345MAY BE RETURNING FOR ANOTHER RETRY
348348SET FUNCTION FOR NEXT I/O (COMMAND IN REG-C)
349349IO FUNCTION ADDRESS
350350GET IT TO ACCUMULATOR FOR MASKING
351351REMOVE PREVIOUS COMMAND
352352SET TO NEW COMMAND
353353REPLACED IN IOPB
357357MAX RETRIES BEFORE PERM ERROR
359359START THE I/O FUNCTION AND WAIT FOR COMPLETION
361361CLEARS THE CONTROLLER
363363LOW ADDRESS FOR IOPB
364364TO THE CONTROLLER
365365HIGH ADDRESS FOR IOPB
366366TO THE CONTROLLER, STARTS OPERATION
369369WAIT FOR COMPLETION
370370READY?
373373CHECK IO COMPLETION OK
374374MUST BE I/O COMPLETE (00) UNLINKED
37537500 UNLINKED I/O COMPLETE, 01 LINKED I/O COMPLETE (NOT USED)
37637610 DISK STATUS CHANGED 11 (NOT USED)
377377READY STATUS CHANGE?
380380MUST BE BO IN THE ACCUMULATOR
382382SOME OTHER CONDITION, RETRY
384384CHECK I/O ERROR BITS
387387UNIT NOT READY
389389ANY OTHER ERRORS? (DELETED DATA 0K)
392392READ OR WRITE IS OK, ACCUMULATOR CONTAINS ZERO
395395NOT READY, TREAT AS ERROR FOR NOW
396396CLEAR RESULT BYTE
399399RETURN HARDWARE MALFUNCTION (CRC, TRACK, SEEK, ETC.)
400400THE MDS CONTROLLER HAS RETURNED A BIT IN EACH POSITION
401401OF THE ACCUMULATOR, CORRESPONDING TO THE CONDITIONS,
4024020 - DELETED DATA (ACCEPTED AS OK ABOVE)
4034031 - CRC ERROR
4044042 - SEEK ERROR
4054053 - ADDRESS ERROR (HARDWARE MALFUNCTION)
4064064 - DATA OVER/UNDER FLOW (HARDWARE MALFUNCTION)
4074075 - WRITE PROTECT (TREATED AS NOT READY)
4084086 - WRITE ERROR (HARDWARE MALFUNCTION)
4094097 - NOT READY
410410(ACCUMULATOR BITS ARE NUMBERED 7 6 5 4 3 2 1 0)
412412IT MAY BE USEFUL TO FILTER OUT THE VARIOUS CONDITIONS,
413413BUT WE WILL GET A PERMANENT ERROR MESSAGE IF IT IS NOT
414414RECOVERABLE. IN ANY CASE, THE NOT READY CONDITION IS
415415TREATED AS A SEPARATE CONDITION FOR LATER IMPROVEMENT
417417REGISTER C CONTAINS RETRY COUNT, DECREMENT 'TIL ZERO
421421CANNOT RECOVER FROM ERROR
422422ERROR CODE
426426DATA AREAS (MUST BE IN RAM)
427427IO PARAMETER BLOCK
428428NORMAL I/O OPERATION
429429IO FUNCTION. INITIAL READ
430430NUMBER OF SECTORS TO READ
431431TRACK NUMBER
432432SECTOR NUMBER
433433IO ADDRESS

to top

Matching Instruction Sequences
File1 Line# File2 Line# Number of matching instructions
3 3 280
52 53 13
52 54 12
52 55 11
52 56 10
53 52 13
54 52 12
55 52 11
56 52 10

to top

Matching Identifiers
0111 0F3H 0FCH 0FFH 10 10000B 10B 11001111B
1110B 11111000B 11111110B 128 12H 13 1500H 182
26 3H 4H 50 6H 73H 7FH 800H
80H 84H 906H 980H B0H BAH BASE BDH
BDOS BF300H BF803H BF806H BF809H BF80FH BF812H BF86CH
BFF0FH BIAS BOOT BOOTER0 BOOTERR BOOTMSG BUFF CI
CO CONIN CONOUT CONST CPMB CPML CR CSTS
DISKA DSTAT ERROR GOCPM HIGH HOME ICON INTC
INTE IOD IOF ION IOPB IOPDY IORDY IOS
IOT JHZ LBIAS LF LIST LO LOW MON80
NDISKS NSECTS OFDH OFFSET PATCH PO PRMSG PUNCH
RBYTE RD1 RDSEC READ READER READF RECAL RETRY
REVRT REWAIT RI RMON80 RMONB0 RTYPE SELDSK SETDMA
SETFUNC SETSEC SETTRK SIGNON T1 T2 TRYC0UNT TRYCOUNT
VERS WAIT0 WAITIO WBOOT WBOOT0 WBOOTE WERROR WREADY
WRITE WRITF

to top

Partially Matching Identifiers
*** NONE ***
to the top
SCORE 100

CodeSuite copyright 2003-2016 by Software Analysis and Forensic Engineering Corporation